function Skill(l) {
    l = typeof l !== 'undefined' ? l : 1;
    
    this.level = l;
    this.type = "aura";
    this.target = "character";
}

Skill.prototype.getName = function() {
    return "Aura Explosion";
};
Skill.prototype.getDescription = function() {
    return "Explodes your aura and everything around. Dealing " + 
            parseDouble(100 * this.level / 2.0) + 
            "% of actual spirit and magic damage, , decrease your HP by" + 
            parseInt(10 * (this.level - 1)) + "%.";
};
Skill.prototype.getType = function() {
    return this.type;
};
Skill.prototype.getTarget = function() {
    return this.target;
};
Skill.prototype.getElements = function() {
    return java.util.EnumSet.of(
        Packages.base.Elements.Water, 
        Packages.base.Elements.Fire, 
        Packages.base.Elements.Earth, 
        Packages.base.Elements.Wind, 
        Packages.base.Elements.Mud, 
        Packages.base.Elements.Thunder, 
        Packages.base.Elements.Magma, 
        Packages.base.Elements.Steam, 
        Packages.base.Elements.Light, 
        Packages.base.Elements.Dark);
};
Skill.prototype.getStatus = function() {
    return java.util.EnumSet.noneOf(Packages.base.Status["class"]);
};
Skill.prototype.getLevel = function() {
    return this.level;
};

Skill.prototype.setLevel = function(level) {
    this.level = level;
};

Skill.prototype.onCast = function(character) {
    
};

Skill.prototype.onHit = function(character) {
    
};

// Skill physical damage
Skill.prototype.physicDamage = function(character) {
    return 0;
};

// Skill ranged damage
Skill.prototype.rangeDamage = function(character) {
    return 0;
};

// Skill magical damage
Skill.prototype.magicDamage = function(character) {
    return parseInt(character.getMagicAttack() + character.getSpirit() + this.level / 2.0);
};

// Change in characters VITALITY
Skill.prototype.vitality = function(character) {
    var up = 0;
    var down = character.getVitality() * (1.0 - (this.level - 1.0) / 10.0);
    
    return parseInt(up - down);
};

// Change in characters SPIRIT
Skill.prototype.spirit = function(character) {
    var up = 0;
    var down = actualSpirit;
    
    return parseInt(up - down);
};

// Change in characters PHYSICAL ATTACK
Skill.prototype.physicAttack = function(character) {
    var up = 0;
    var down = 0;
    
    return parseInt(up - down);
};

// Change in characters PHYISICAL DEFENSE
Skill.prototype.physicDefense = function(character) {
    var up = 0;
    var down = 0;
    
    return parseInt(up - down);
};

// Change in characters RANGED ATTACK
Skill.prototype.rangeAttack = function(character) {
    var up = 0;
    var down = 0;
    
    return parseInt(up - down);
};

// Change in characters RANGED DEFENSE
Skill.prototype.rangeDefense = function(character) {
    var up = 0;
    var down = 0;
    
    return parseInt(up - down);
};

// Change in characters MAGICAL ATTACK
Skill.prototype.magicAttack = function(character) {
    var up = 0;
    var down = 0;
    
    return parseInt(up - down);
};

// Change in characters MAGICAL DEFENSE
Skill.prototype.magicDefense = function(character) {
    var up = 0;
    var down = 0;
    
    return parseInt(up - down);
};

// Change in characters PRECISION
Skill.prototype.precision = function(character) {
    var up = 0;
    var down = 0;
    
    return parseInt(up - down);
};

// Change in characters ATTACK SPEED
Skill.prototype.attackSpeed = function(character) {
    var up = 0;
    var down = 0;
    
    return parseInt(up - down);
};

// Change in characters MOVEMENT SPEED
Skill.prototype.movementSpeed = function(character) {
    var up = 0;
    var down = 0;
    
    return parseInt(up - down);
};
